// // main.m // screendisplay // // Created by 单军华 on 2018/6/29. // Copyright © 2018年 单军华. All rights reserved. // #import #import "AppDelegate.h" void UncaughtExceptionHandler(NSException *exception); int main(int argc, char * argv[]) { @autoreleasepool { @try { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } @catch (NSException *exception) { UncaughtExceptionHandler(exception); } @finally { } } } // 设置一个C函数,用来接收崩溃信息 void UncaughtExceptionHandler(NSException *exception) { // 可以通过exception对象获取一些崩溃信息,我们就是通过这些崩溃信息来进行解析的,例如下面的symbols数组就是我们的崩溃堆栈。 NSArray *symbols = [exception callStackSymbols]; NSString *reason = [exception reason]; NSString *name = [exception name]; NSString *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject; NSMutableDictionary *dictM = [NSMutableDictionary dictionaryWithContentsOfFile:[caches stringByAppendingPathComponent:@"zplan_crash.plist"]]; if (!dictM) { dictM = [NSMutableDictionary dictionary]; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyyMMddHHmmssSSS"; NSString *timestamp = [formatter stringFromDate:[NSDate date]]; NSDictionary *dict = @{ timestamp : @{ [timestamp stringByAppendingString:@"name"] : name, [timestamp stringByAppendingString:@"_reason"] : reason, [timestamp stringByAppendingString:@"__symbols"] : symbols } }; [dictM setValuesForKeysWithDictionary:dict]; [dictM writeToFile:[caches stringByAppendingPathComponent:@"zplan_crash.plist"] atomically:YES]; }